home *** CD-ROM | disk | FTP | other *** search
/ WOW! 2 / WOW - Vol 2.iso / pd_share / system / 16mhz / source / 16mhz.c next >
C/C++ Source or Header  |  1992-06-27  |  2KB  |  121 lines

  1. /*******************************************/
  2. /*   Modul : 16MHZ.C                       */
  3. /* Aufgabe : Schaltet in 16MHZ-Modus mit   */
  4. /*           eingeschaltetem Cache         */
  5. /*******************************************/
  6.  
  7.  
  8. # include <portab.h>
  9. # include <stdio.h>
  10. # include <string.h>
  11. # include <tos.h>
  12.  
  13.  
  14. typedef struct
  15. {
  16.     UBYTE  id[4];
  17.     LONG   value;
  18. } COOKIE_STRUCT;
  19.  
  20.  
  21.  
  22. /* Prototypen */
  23. LONG SuperOn( VOID );
  24. VOID SuperOff( LONG adr );
  25. WORD FindCookie( UBYTE *id, LONG *value );
  26.  
  27.  
  28.  
  29.  
  30. WORD main( VOID )
  31. {
  32.     LONG cvalue,
  33.          ret;
  34.  
  35.  
  36.     /* COOKIE suchen */
  37.     if( !FindCookie( "_MCH", &cvalue ) )
  38.         return( -1 );
  39.  
  40.  
  41.     /* Kein STE ?? */
  42.     if( (WORD)(cvalue >> 16) != 1 )
  43.         return( -2 );
  44.  
  45.  
  46.     ret = SuperOn();
  47.  
  48.     /* Modus umschalten */
  49.     *(BYTE *)0xFF8E21L = 3;
  50.  
  51.     SuperOff( ret );
  52.  
  53.  
  54.     puts( "\n\033p            16MHz             \033q" );
  55.     puts( "      by Markus Hövener \n\n" );
  56.  
  57.  
  58.     return( 0 );
  59. }
  60.  
  61.  
  62. /********************************************/
  63. /* Schaltet in den Supervisormode           */
  64. /********************************************/
  65. LONG SuperOn( VOID )
  66. {
  67.     return( Super( (VOID*)1L )
  68.             ? 0L
  69.             : Super( (VOID *)0L ) );
  70. }
  71.  
  72.  
  73. /********************************************/
  74. /* Schaltet ihn wieder aus                  */
  75. /********************************************/
  76. VOID SuperOff( LONG adr )
  77. {
  78.     if( adr )
  79.         Super( (VOID *)adr );
  80. }
  81.  
  82.  
  83. /********************************************/
  84. /* Sucht einen COOKIE                       */
  85. /********************************************/
  86. WORD FindCookie( UBYTE *id, LONG *value )
  87. {
  88.     COOKIE_STRUCT  *jar;
  89.     LONG           i = 0,
  90.                    ret;
  91.  
  92.  
  93.     /* Zeiger auf den Jar holen */
  94.     ret = SuperOn();
  95.     jar = (COOKIE_STRUCT *)(*((LONG **)0x5a0L));
  96.     SuperOff( ret );
  97.  
  98.  
  99.     /* Kein Jar vorhanden */
  100.     if( !jar )
  101.         return( 0 );
  102.  
  103.  
  104.  
  105.     /* Solange der NULL-Cookie nicht erreicht ist */
  106.     while( *((LONG *)&jar[i]) )
  107.         if( !strncmp( jar[i].id, id, 4L ) )
  108.         {
  109.             /* Wert des Cookies eintragen */
  110.             if( value != NULL )
  111.                 *value = jar[i].value;
  112.                 
  113.             return( 1 );
  114.         }
  115.         else
  116.             ++i;
  117.         
  118.  
  119.     /* Nicht gefunden... */
  120.     return( 0 );
  121. }